﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using System.Text.RegularExpressions;
using System.Globalization;

namespace InnvoiceActual.Logica.GestorObject.Remito
{
    public class Remito
    {
        #region Property

        EmpresaCS empresa = EmpresaCS.Instance;

        private int _codigoEmpresa;
        public int CodigoEmpresa
        {
            get
            {
                return _codigoEmpresa;
            }
            set
            {
                if (this._codigoEmpresa == value)
                {
                    return;
                }
                this._codigoEmpresa = value;
            }
        }

        private int _nroComprobante1;
        public int NroComprobante1
        {
            get
            {
                return _nroComprobante1;
            }
            set
            {
                if (this._nroComprobante1 == value)
                {
                    return;
                }
                this._nroComprobante1 = value;
            }
        }

        private int _nroComprobante2;
        public int NroComprobante2
        {
            get
            {
                return _nroComprobante2;
            }
            set
            {
                if (this._nroComprobante2 == value)
                {
                    return;
                }
                this._nroComprobante2 = value;
            }
        }

        private byte _codigoTipo;
        public byte CodigoTipo
        {
            get
            {
                return _codigoTipo;
            }
            set
            {
                if (this._codigoTipo == value)
                {
                    return;
                }
                this._codigoTipo = value;
            }
        }

        private DateTime _fecha;
        public DateTime Fecha 
        {
            get
            {
                return _fecha;
            }
            set
            {
                if (this._fecha == value)
                {
                    return;
                }
                this._fecha = value;
            }
        }

        private string _fechaString;
        public string FechaString
        {
            get
            {
                return _fechaString;
            }
            set
            {
                if (this._fechaString == value)
                {
                    return;
                }
                this._fechaString = value;
            }
        }

        private string _comprobante;
        public string Comprobante
        {
            get
            {
                return _comprobante;
            }
            set
            {
                if (this._comprobante == value)
                {
                    return;
                }
                this._comprobante = value;
            }
        }

        private ClienteCS _cliente;
        public ClienteCS Cliente
        {
            get
            {
                return _cliente;
            }
            set
            {
                if (this._cliente == value)
                {
                    return;
                }
                this._cliente = value;
            }
        }

        private string _razonSocialCliente;
        public string RazonSocialCliente
        {
            get
            {
                return _razonSocialCliente;
            }
            set
            {
                if (this._razonSocialCliente == value)
                {
                    return;
                }
                this._razonSocialCliente = value;
            }
        }

        private double _total;
        public double Total
        {
            get
            {
                return _total;
            }
            set
            {
                if (this._total == value)
                {
                    return;
                }
                this._total = value;
            }
        }

        private string _totalString;
        public string TotalString
        {
            get
            {
                return _totalString;
            }
            set
            {
                if (this._totalString == value)
                {
                    return;
                }
                this._totalString = value;
            }
        }

        private int _bulto;
        public int Bulto
        {
            get
            {
                return _bulto;
            }
            set
            {
                if (this._bulto == value)
                {
                    return;
                }
                this._bulto = value;
                
            }
        }

        private double _pesoKilogramo;
        public double PesoKilogramo
        {
            get
            {
                return _pesoKilogramo;
            }
            set
            {
                if (this._pesoKilogramo == value)
                {
                    return;
                }
                this._pesoKilogramo = value;
            }
        }

        private CabeceraRemito _cabecera;
        public CabeceraRemito Cabecera
        {
            get
            {
                return _cabecera;
            }
            set
            {
                if (this._cabecera == value)
                {
                    return;
                }
                this._cabecera = value;
            }
        }

        private List<ItemRemito> _items;
        public List<ItemRemito> Items
        {
            get
            {
                return _items;
            }
            set
            {
                if (this._items == value)
                {
                    return;
                }
                this._items = value;
            }
        }

        private PieRemito _pie;
        public PieRemito Pie
        {
            get
            {
                return _pie;
            }
            set
            {
                if (this._pie == value)
                {
                    return;
                }
                this._pie = value;
            }
        }

        private bool _anulada;
        public bool Anulada
        {
            get
            {
                return _anulada;
            }
            set
            {
                if (_anulada == value)
                    return;
                _anulada = value;
            }
        }

        private bool _impresa;
        public bool Impresa
        {
            get
            {
                return _impresa;
            }
            set
            {
                if (_impresa == value)
                    return;
                _impresa = value;
            }
        }

        private bool _estado;
        public bool Estado
        {
            get
            {
                return _estado;
            }
            set
            {
                if (_estado == value)
                    return;
                _estado = value;
            }
        }

        #endregion

        #region Contructor

        public Remito()
        {

            CodigoEmpresa = empresa.CodigoEmpresa;
            NroComprobante1 = empresa.NroComprabante1;
            Cliente = new ClienteCS();
            Cliente.RazonSocial = "";
            Cliente.Codigo = 0;
            Cabecera = new CabeceraRemito();
            Items = new List<ItemRemito>();
            Pie = new PieRemito();
            Fecha = DateTime.Now;
            Bulto = 1;
            PesoKilogramo = 0;
            Anulada = false;
            Impresa = false;
            Estado = true;
        }

        #endregion
    }

    public class MyOrderingRemito : IComparer<Remito>
    {
        public int Compare(Remito x, Remito y)
        {
            int compareNro = x.NroComprobante1.CompareTo(y.NroComprobante1);

            if (compareNro == 0)
            {
                compareNro = x.NroComprobante2.CompareTo(y.NroComprobante2);
            }
            
            return compareNro;
        }
    }
}
